/**
 * 防抖：防抖是指事件在执行n秒后执行回调，如果在n秒内再次触发，则重新计算时间。
 * @param {Function} fn 代表一个函数，里面可能会频繁发生回调或ajax请求
 * @param {Number} delay 表示多少毫秒才触发，默认为200毫秒
 * */ 

export function debuonce(fn:Function,delay = 200) {
    let timer:NodeJS.Timeout | null = null
    return function () {
        if(timer){
            clearTimeout(timer)
        }
        timer = setTimeout(()=>{
            fn.apply(fn,arguments)
            timer = null
        },delay)
    }
}

/**
 * 节流：节流是指如果持续触发某个事件，则每隔n秒触发一次
 * @param {Function} fn 代表可能会频繁发生回调或ajax请求
 * @param {Number} delay 表示间隔多少毫秒才触发，默认为100毫秒
 * @returns
 * */ 

export function throttle(fn:Function,delay = 100){
    //首先设定一个变量，在我们没有执行定时器时为null
    let timer :NodeJS.Timeout | null = null
    return function () {
        if (timer) return
        //当我们发现这个定时器存在，则表示定时器已经在运行中，需要返回
        timer = setTimeout(()=>{
            fn.apply(fn,arguments)
            timer = null
        },delay)
    }
}

